1. The Field of the Invention
The present invention relates to systems and methods for transferring data between a transport layer and a link layer in a computer system. More specifically, the present invention relates to systems and methods for transmitting bulk data partitioned into a plurality of packets between a transport layer and a link layer using a singular command therebetween.
2. The Relevant Technology
Today, computers are becoming a main staple for information exchange in the modern society. Computers, namely personal computers (PC), provide the source and termination points for a majority of information exchange. A user at a PC may input information and quickly transmit such information to another user at a destination computer in a fraction of a second. The logistics of such transfers originated from simple origins such as directly coupled or connected computers. However, today, computers are not directly coupled in a one-to-one corresponding configuration, but frequently exist in a network environment wherein multiple computers are interconnected one with another.
In computer networks wherein interconnections are not dedicated and isolated, information or data targeted for one computer must be addressed for receipt by a designated computer. Furthermore, information traveling from a source computer to a destination computer, in most networks, travels over a shared network link. To facilitate the transfer and management of significant amounts of data across communication or computer networks, the partitioning of data into useable packets has become necessary to facilitate multiusers on a shared network resource.
In addition to partitioning data into smaller components or packets, network transfer software facilitating the exchange of data between computers has also been partitioned into identifiable components. Standardized components or structures conforming to the OSI protocol model have been promulgated for many years. Although many systems do not incorporate each and every level of the OSI standardized model, the majority of network systems incorporate fundamental components of the OSI model. For example, the transport layer of the OSI model facilitates the aforementioned partitioning or packetizing of bulk data into useable, convenient packet formats for dispatching throughout the computer network. Some transport layers have become preeminently dominant in the computer networking arena. For example, TCP/IP, although taking on minor and major variations, has become a standard transport protocol for use in implementing the transport layer of the OSI model for computer networking. Additionally, IPX and NetBEUI have also become standard transport protocols in computer networks. Such transport protocols are implemented in an OSI or network protocol stack by programming a transport protocol driver capable of receiving bulk data and transforming such bulk data into packetized and formatted data capable of efficient propagation through a computer network.
FIG. 1 represents a prior art configuration of a network protocol stack or configuration 100 capable of transporting bulk data 102 between a computer and network 164. As described above, transport layer or driver 104 receives bulk data 102 and partitions bulk data 102 into packets properly sized and formatted for propagation in network 164. In FIG. 1, transport driver 104 partitions bulk data 102 into packets 106, 108 and 110 and applies formats accordingly. Generally, rather than directly transporting or forwarding data through subsequent layers or levels, pointers to the data packets are generated. Pointer 112, 114 and 116, provide accessibility to the packetized data and are individually passed to other layers as opposed to replicating or copying entire data packets upon issuance of a transfer command.
As described above, a transport driver interfaces with other software components supporting the functionality of other OSI layers. To facilitate the compatibility of various layers, an interface 120 defines a neutral specification for the development of operative layers or drivers. Transport driver 104 incorporates an interface 118 compliant with interface 120 through which packetized information may be exchanged.
A link layer device driver 124 provides link layer functionality which generally comprises preparing and presenting data in a particular form and location in preparation for transmission and reception by hardware such as physical device 130 interfaced to network 164. Similar to transport driver 104, link layer device driver 124 provides a compatible interface 128 for compliant communication therebetween.
Communication flow of bulk data 102 to network 164 will now be discussed. Transport layer 104 receives bulk data 102 from yet a higher layer in the OSI module, typically an application layer. As discussed above, transmission of bulk data 102 in raw format across network 164 is prohibitive due to several factors such as (i) interference noise present in network 164 which destroys or degrades a portion of bulk data 102, thus requiring a retransmission of the entire bulk data, (ii) the shared nature of network 164 with other computers requiring time-multiplexing, and (iii) other practicalities of successful transmission of a substantial amount of data in a single transmit session. In a modern system, bulk data 102 is partitioned into, among others, data packet 106 having a pointer 112. Transport driver 104 dispatches a send packet request 122 comprised of pointer 112 transmitted via interface 120 through send packet request 126 to link layer device driver 124. Link layer device driver 124 then issues a request 132 to physical device 130 thereby notifying physical device 130 of the presence of data packet 106 for dispatch through network 164.
Traditional network protocol stacks typically employ dedicated buffers within system resources such as RAM that are accessible both to a computer microprocessor and physical device 130. In such configurations, link layer device driver 124 upon receiving pointer 112 may copy data packet 106 into the predefined buffer known and accessible to physical device 130.
Physical device 130, upon receipt of request 132, performs an autonomous transfer of data packet 106 into network 164. Physical device 130 generally is comprised of embedded control facilitating the extraction of data packets from common memory resources. Physical device 130 in a response 134 notifies link layer device driver 124 of the completion of the transfer of data packet 106 to network 164. Response 134, although depicted as a direct communication with link layer device driver 124 is commonly carried out with physical device 130 initiating an interrupt through the microprocessor of the computer system followed by the servicing of an interrupt service routine directed to link layer device driver 124. Link layer device driver 124 issues a send packet response 136 to interface 120 which in turn reissues or simply forwards send packet response 138 to transport driver 104. The transformation of send packet response 136 to send packet response 138 depends upon the level of functionality of interface 120.
Upon receipt of send packet response 138, transport driver 104 then initiates the transfer of packet 108 and packet 110 in sequential order by employing the processes utilized by packet 106 such as initiation of send packet requests 140 and 152, and receipt of send packet response 150 and 162. It should be noted that packets individually traverse the network protocol stack before the initiation of a subsequent traversal by a subsequent data packet. Furthermore, the successful transfer of a data packet by physical device 130 to network 164 results in a specific acknowledgement or response for each packet transferred. As discussed earlier, such responses typically take the form of an interrupt to the microprocessor which causes the microprocessor to postpone its present operations in favor of servicing an individual response. It should be evident that as bulk data 102 increases in size and the number of data packets increases, the delivery of sizeable bulk data results in a significant impairment of microprocessor performance. Furthermore, modern communication networks facilitating the transfer of high bandwidth data, such as imaging data, are required to devote a significant amount of microprocessor resources to the manipulation of such data. When undesirable intermittent interruptions become pervasive, performance degrades to undesirable or intolerable levels.
It would represent an advancement over the prior art to provide a method and system for sending a plurality of data packets from a transport driver to a link layer device driver without transmitting an individual command for each data packet. It would, therefore, represent an advancement in the art to provide the ability to minimize the quantity of interruptions to the microprocessor during the transmission of bulk data to a network. It would also represent an advancement in the art to minimize the amount of handshaking carried out between layers within the OSI stack. It would yet represent an advancement in the art to provide a method and system for receiving a plurality of data packets from a network and forwarding the plurality of data packets to a transport driver without being required to issue individual transfer commands for each packet.
The foregoing problems in the prior state of the art have been successfully overcome by the present invention, which is directed to a system and method for transferring a plurality of data packets between a transport layer and a link layer device driver in a computer operating system. The current system and method can be used in virtually any computer network system. The present invention comprises both methods and systems for batching or transferring a plurality of data packets between a transport layer and a link layer in a network protocol stack of a computer system.
In the present invention, a network protocol stack comprised of a transport driver receives bulk data to transfer to a network. The transport driver, in order to facilitate orderly transfer of data through the network, packetizes and formats the bulk data into data packets. The transport driver contains a level of functionality for initiating a multi-packet transfer by generating a request including an array of pointers to the data packets. A pointer to the array of pointers is also included within the multi-packet transfer request. Additionally, a quantity of data packets indicator is included within the request and, alternatively, when a plurality of destination drivers exist, a handle or device descriptor accompanies the multi-packet request.
The transport layer subsequently issues a multi-packet or send packets request to the abstract interface which in turn evaluates the device driver handle or descriptor as specified by transport driver to determine the capabilities or sophistication of the destination link layer device driver. If the abstract interface determines that the link layer device driver is capable of a single command, multi-packet transfer, then the abstract interface issues the single command and the link layer device driver begins retrieving the plurality of data packets and placing them in data buffers accessible to the target hardware such as a network card or xe2x80x9cphysical device.xe2x80x9d The link layer device driver then starts the physical device transferring the data.
Upon the completion of the transfer of multiple packets by the physical device, a transfer response is generated to the link layer device driver which in turn issues a send complete response to the abstract interface. The abstract interface sends a send complete response to the transport driver acknowledging the completion and readiness for additional data packets. Such a transfer of a plurality of data packets in a single command minimizes interrupts to the host computer microprocessor. Each interrupt to the host microprocessor suspends the present processing of the microprocessor to attend to the present interrupt.
Alternative configurations of the present invention provide for the coupling of sophisticated drivers, that is to say drivers having enhanced functionality capable of multi-packet transfers, with less sophisticated drivers where the abstract interface mediates or facilitates the invocation of multi-packet transfer commands by emulating the multi-packet transfer, thus allowing the less sophisticated destination driver to interface with a more sophisticated transport layer driver. For example, the abstract interface upon receiving a multi-packet transfer request, evaluates the sophistication and capability of the designated device driver. If the destination driver is not capable of handling a multi-packet transfer request, individual packet transfer requests can be created by the abstract interface and issued sequentially by the abstract interface to the destination driver. Sophistication or capability information of a driver is loaded into the abstract interface upon loading the driver into the system. Inclusion of sophistication and capability information facilitates the interoperation of older or legacy drivers with more sophisticated or modern drivers as new generations of drivers become available. The present invention also facilitates receiving a plurality of packets from a network and transferring a plurality of packets to a transport layer using a single command.
The abstract interface describes an interface by which one or more device drivers may communicate with one or more transport drivers and the operating system. The abstract interface enables a transport driver to pass network packets or data packets to any one of a plurality of device drivers for transmission to the network via any one of a plurality of physical devices. The abstract interface also facilitates the reception of network packets by a device driver from any one of several underlying physical devices. In summary, the abstract interface defines a fully abstracted environment for facilitating device driver and transport driver development by including common functions such as registration and interception of hardware interrupts into abstract interface functions that may be invoked by the drivers.
Accordingly, it is the primary object of this invention to provide a system and method in a computer operating system for transferring a plurality of data packets between a transport layer and a link layer device driver via an abstract interface.
Another primary object of the invention is to provide a system and method for transferring a plurality of received data packets from a link layer device driver to a transport driver via an abstract interface while minimizing the impact of interruptions to the host system microprocessor that occurs when individual packets are transferred.
Another important object of the present invention is to provide an abstract interface between drivers in a network protocol stack wherein the standardized development interface facilitates ease of portability and driver development. Additionally, many common functions and resource management details of drivers are incorporated into the abstract interface. The abstract interface is also capable of discerning the level of sophistication of interfacing drivers and emulating multiple transfer capabilities for drivers inherently lacking such capability.
Additional objects and advantages of the invention will be set forth in the description which follows, and in part will be obvious from the description, or may be learned by the practice of the invention. The objects and advantages of the invention may be realized and obtained by means of the instruments and combinations particularly pointed out in the appended claims. These and other objects and features of the present invention will become more fully apparent from the following description and the appended claims, or may be learned by practice of the invention as set forth hereinafter.